包嗅探和包回放简介

您所在的位置:网站首页 tcpdump 查看数据包内容 包嗅探和包回放简介

包嗅探和包回放简介

#包嗅探和包回放简介| 来源: 网络整理| 查看: 265

本文共 14876 字,大约阅读时间需要 49 分钟。

一.  嗅探

1.1  嗅探技术简介

1.1.1  目标

嗅探的目标:获取在网络上传输的各种有价值信息:账号、密码、非公开协议

1.1.2  原理

嗅探的原理:大多数嗅探都是在以太网内,利用数据链路层技术进行的嗅探,依照嗅探器部署的位置不同,它们为达到这个目的所采用的技术也不尽相同

1.1.3  类型

1.1.3.1  共享以太网中的嗅探

共享以太网中的通信的方式:要传送的所有数据都是广播到整个网络中去的,数据帧会流经每个结点。

正常情况下,结点只会对发给自己的数据或者广播数据进行响应,一看到数据帧头部标明的MAC地址与自身不符,就不再看后面的内容而直接将其丢弃。但是,如果把网卡设定为混杂(promiscuous)模式,那么结点将能接收到网络中的所有数据。只要是接入到网络中的结点,都能够通过这种方法实现嗅探

 

广播方式:该模式下的网卡能够接收网络中的广播信息。    组播方式:设置在该模式下的网卡能够接收组播数据。   直接方式:在这种模式下,只有目的网卡才能接收该数据

混杂模式:在这种模式下的网卡能够接收一切通过它的数据,而不管该数据是否是传给它的。

机器A、B、C在同一个共享以太网中,由集线器连接,其中机器B是FTP服务器,机器A想要登录机器B,如果机器C想要知道机器A的信息,只需要将网卡设为混杂模式,然后就可以接收到A和B之间的所有流量。

 

1.1.1.1  交换以太网中的嗅探

与共享以太网不同的是,交换以太网采用的组网设备是交换机(Switch)而非共享总线或集线器(Hub)。交换机是一种基于MAC地址识别,能完成封装转发数据包功能的网络设备。交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和 目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。

 

 

 

 

1.交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中。    2.交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。    3.如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)。    4.广播帧和组播帧向所有的端口转发。

 

1.1.1.1.1  MAC 地址溢出(MAC Flooding)

Switch 之所以能够由数据包中目的MAC地址判断出他应该把数据包发送到哪一个端口上是根据自身维护的一张ARP地址表,这张地址表可能是动态的也可能是静态的,如果是动态的地址表,并且其大小是有上限的,攻击者可以通过发送大量错误的地址信息而使Switch维护的地址表‘溢出’,从而使其变成广播模式。

1.1.1.1.2  ARP 欺骗(ARP Spoof)

假设A的IP地址是192.168.1.11

MAC地址是:11-11-11-11-11-11;

B的IP地址是 192.168.1.77

MAC地址是77-77-77-77-77-77

网关IP地址是192.168.1.1

MAC地址 是:01-01-01-01-01-01。

 

1).A发送ARP欺骗包(ARP应答包)给B,告诉B:我(A)是网关,你把访问外网的数据发给我(A)吧!ARP欺骗包如下:

  SrcIP: 192.168.1.1 ,SrcMAC:11-11-11-11-11-11

DstIP: 192.168.1.77 ,DstMAC:77-77-77-77-77-77

 

2).A发送ARP欺骗包(ARP应答包)给网关,告诉网关:我(A)是机器B,结果网关把所有给B的数据都发到A那里了。ARP欺骗包如下:

  SrcIP: 192.168.1. 77,SrcMAC:11-11-11-11-11-11

DstIP: 192.168.1. 1,DstMAC:01-01-01-01-01-01

 

3).机器A有一个辅助用的转发软件,它负责把“网关->B”和“B->网关”的数据包转发。

 

 

至此,ARP欺骗的辅助任务完成了,接下来就是用你的嗅探器进行偷窥了~噢~哈哈!

这里有几点值得注意一下的:

 

1).ARP欺骗包每隔一段时间要发一次,否则网关和B的ARP缓存会更新!

2).ARP欺骗完成后,网关的ARP记录会有两记录的MAC地址是相同的,分别 是:192.168.1.11(11-11-11-11-11-11)和192.168.1.77(11-11-11-11-11-11),这样可能会比较明显,可以把A自己在网关的ARP缓存改了:192.168.1.11(01-10-01-10-01-10,乱写一个),但这样会有两个问题:一个是这个MAC是乱写的,局域网内根本没有这个MAC地址的机器,根据交换机的工作原理,网关发给192.168.1.11这IP的机器的数据将会被广播。第二个是,此刻你(A)的正常与外界通信的能力将会丧失。可以权衡考虑一下。

 

ARP欺骗就是通过发ARP应答包让网关和受害机的动态ARP表产生错误 IP-MAC 映射

1.1.1.1.1  交换机缓存欺骗

交换机里面有一张CAM表,记录了Mac-Port信息(这个端口对应的机器的MAC地址是什么),MAC信息的获取是:交换机从转发的数据包中提取。所谓欺骗交换机缓存,就是修改这张CAM表以达到欺骗交换机的目的!

 

假设有一个4端口的交换机,它的CAM表如下:

   port1 -- 11-11-11-11-11-11

  port2 -- 22-22-22-22-22-22

  port3 -- 33-33-33-33-33-33

port4 -- 44-44-44-44-44-44

 

现在port1的机器A(IP是192.168.1.11,MAC地址为11-11-11-11-11-11)想要嗅探port2的机器B(IP是192.168.1.22,MAC地址为22-22-22-22-22-22),怎么办呢?流程如下:

 

 

1)机器A对外发送一个数据包,如下:

 

SrcIP:192.168.1.11  ScrMac:22-22-22-22-22-22

DstIP:xxx.xxx.xxx.xxx(随便写),DstMac:xx-xx-xx-xx-xx-xx(随便写)

 

  此时,交换机收到这个包,发现在原来CAM里面,port1对应的机器MAC地址是11-11-11-11-11-11,怎么现在变为:22-22-22-22-22-22了呢??哦,应该是这台机器的MAC地址变了吧~好!那我更新CAM表!

 

更新后的交换机CAM表如下:

 

  port1 -- 22-22-22-22-22-22 (注意:Port1比Port2优先级高)

  port2 -- 22-22-22-22-22-22

  port3 -- 33-33-33-33-33-33

port4 -- 44-44-44-44-44-44

 

2)现在有port1和port2对应的MAC地址是一样的。如果现在网关(假设现在port4连接的是网关)来了一个数据包是给机器B(IP是 192.168.1.22,MAC地址为22-22-22-22-22-22),交换机会顺序查询此刻的CAM表来确定该数据包转发去哪个端口!在查询 port1时,发现此端口对应MAC地址和数据包里的MAC地址相同,交换机直接就把包转发到port1的机器A了,由于该包已转发完毕,交换机继续处理 下一个数据包......就这样,数据包又再次落入充满窥探欲望的人手中!

 

这里也需要注意几个问题:

  1).A收到包后,还是需要转发给B的,不然B和外面的对话就中断了。

2).当A把包转发给B时,需要修复交换机的CAM表。

 

交换机缓存欺骗就是通过发特定的包给交换机,让其CAM表产生错误的 PORT-MAC 映射

1.1.1.2  核心交换节点的嗅探

在核心交换结点,数据是从该结点上直接流过的,因此在功能上实现嗅探十分容易。但是仅仅是“看”到数据没有任何意义,从中提取出信息才是嗅探的最终目的。而想要对这里巨大的网络流量 进行分析却不是一件容易的事,以目前的计算能力,只能采用分布式处理的技术,将分析工作分给多个处理器去完成。 

 

恶意的嗅探很难在核心交换结点处实现——除非这里已经完全被攻击者接管。否则,即使攻击者成功的运行了侦听程序(已经可以用幸运来形容了),在安防措施极为严密的地方,想要搭建分布式的分析环境是不可想象的,同样,想要将庞大数据传送到远端作分析而不被发觉难度也是非常大的。

1.1.1.3  传输介质上的嗅探

在网络的传输介质上实现嗅探是最不容易被发现和防范的一种被动攻击。攻击者不需要修改网络互联设备的配置,甚至不需要接入网络,只需物理上的接触即可获取介 质上传输的信息内容。尽管这种嗅探需要先进的专用设备才能实现,但实施起来的隐蔽性使其成为不容忽视的网络安全威胁之一。 

无线网络直接利用电磁波传输信息的特性使其不可避免的面临侦听的威胁;铜缆和非屏蔽双绞线会辐射出电磁波而导致信息泄漏;甚至是被普遍认为无法窃听的光纤,如果能够在不损坏内部结构的前提下剥去其涂敷层(现在还做不到),再使其弯曲引发辐射,照样能够达到嗅探的目的。

1.1.2  各种嗅探工具

谷歌以下关键字:*sniff 、tcpdump 、Ethereal(wireshark)

1.2  Tcpdump

1.2.1  基本命令行参数

Tcpdump是linux系统下一款非常强大的嗅探器,它采用命令行方式工作,它的命令格式为:

比较常用的参数/值

-i any : 监听所有网络端口 -n : 不把网络地址显示为域名 -nn : 不显示域名和端口名 -X : 在输出行同时打印ASCII字符和HEX十六进制显示的包信息 -XX : 在-X基础上,增加了数据链路层的头部信息的显示 -v, -vv, -vvv : 逐步提高抓取信息的详细程度 -c : 抓取c个包即停止 -S : 打印绝对序列号 -e : 在输出行打印出数据链路层的头部信息 -s : 设置默认抓取的包数据的长度(如果不设置,默认只抓一个包前面 96 字节) -w:直接将包写入文件中,并不分析和打印出来

 

几个简单的例子

 

1).Basic communication // 打印最简单的包信息

# tcpdump -nS

2) Basic communication (very verbose) // 打印比较详细的包信息

# tcpdump -nnvvS

3) A deeper look at the traffic // 增加HEX码的打印

# tcpdump -nnvvXS

4) Heavy packet viewing //增加抓取的字节长度

# tcpdump -nnvvXSs 1514

 

1.1.1  过滤表达式

表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。

表达式的几种关键字:

 

第一种是关于类型的关键字,主要包括host,net,port, 例如 host  210.27.48.2,指明 210.27.48.2是一台主机,net  202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.   第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dstand src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是srcor dst关键字。   第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包 的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '!', 与运算是'and','&&';或运算是'or' ,'||';

 

 

几个简单的例子:

host // 根据IP抓包

# tcpdump host 1.2.3.4

src, dst // 根据IP只抓一个方向的包

# tcpdump src 2.3.4.5 # tcpdump dst 3.4.5.6

net // 抓取一个局域网内的包

# tcpdump net 1.2.3.0/24

proto // 根据协议抓包

# tcpdump icmp

port // 根据端口抓包

# tcpdump port 3389

src, dst port // 根据端口只抓一个流向的包

# tcpdump src port 1025 # tcpdump dst port 389

Port Ranges // 根据端口范围抓包

# tcpdump portrange 21-23

Packet Size Filter // 根据包大小抓包

# tcpdump less 32 # tcpdump greater 128

// 也可以下面这种形式 # tcpdump > 32 # tcpdump = 4.0)

    

Tcprewrite重写第二层的举例:

n  DLT_EN10MB (Ethernet)

// 下面的指令将使所有流量的源MAC变成00:44:66:FC:29:AF,目标MAC变成00:55:22:AF:C6:37

$ tcprewrite --enet-dmac=00:55:22:AF:C6:37 --enet-smac=00:44:66:FC:29:AF --infile=input.pcap --outfile=output.pcap

 

【以下这两点没有试验过,只是自己的理解】

n  DLT_CHDLC (Cisco HDLC)

//Cisco HDLC has two fields in the Layer 2 header: address and control. Both can be set using this plugin: (通过添加一些插件支持非以太网的数据链路层包重写)

--hdlc-address

--hdlc-control

n  DLT_USER0 (User Defined)

//The user defined DLT option allows you to create any DLT/Layer2 header of your choosing by using the following two options: (支持用户自定义链路层数据格式)

--user-dlt - Set pcap DLT type

--user-dlink - Set packet layer 2 header

 

u  Layer3 网络层的重写

n  使流量在两个主机之间传递

$ tcprewrite --endpoints=10.10.1.1:10.10.1.2 --cachefile=input.cache --infile=input.pcap --outfile=output.pcap --skipbroadcast

n  使流量在一个IP范围内传递

$ tcprewrite --seed=423 --infile=input.pcap --outfile=output.pcap

n  是一个网段内的流量变成另一个网段内的流量

$ tcprewrite --pnat=10.0.0.0/8:172.16.0.0/12,192.168.0.0/16:172.16.0.0/12 --infile=input.pcap --outfile=output.pcap –skipbroadcast

n  修改部分协议字段再发送流量

$ tcprewrite --tos=50 --infile=input.pcap --outfile=output.pcap

$ tcprewrite --flowlabel=67234 --infile=input.pcap --outfile=output.pcap

 

u  Layer4 TCP/UDP层的重写

n  重新映射端口

$ tcprewrite --portmap=80:8080,22:8022 --infile=input.pcap --outfile=output.pcap

n  修改部分字段

$ tcprewrite --fixcsum --infile=input.pcap --outfile=output.pcap

 

u  Layer5-7 层的重写

由于包在传输过程中是分段的,所以抓到的包里有些应用层数据已经丢失,针对这一点,tcprewrite提供了一些参数去‘修理’这个包

//Pad the packets with 0x00:

$ tcprewrite --fixlen=pad --infile=input.pcap --outfile=output.pcap

//Rewrite the packet header length fields to match the captured packet length:

$ tcprewrite --fixlen=trunc --infile=input.pcap --outfile=output.pcap

//Delete the packet from the pcap file:

$ tcprewrite --fixlen=del --infile=input.pcap --outfile=output.pcap

 

不同的网络对‘能发送的最大的数据段大小MTU’限制不同,tcprewrite 在3..3版本的时候提供了部分参数处理这个问题

 

//Truncate packets to the MTU length (default 1500 bytes):

$ tcprewrite --mtu-trunc --infile=input.pcap --outfile=output.pcap

//Truncate packets to a user defined MTU (1000 bytes):

$ tcprewrite --mtu=1000 --mtu-trunc --infile=input.pcap --outfile=output.pcap

//Use IP fragmentation to break up large packets into smaller ones. As of v3.3.0 you can use the fragroute engine to fragment IP packets into smaller pieces to fit within the MTU. The way to do this is to create a text file frag.cfg with the contents

ip_frag 1400

and run tcprewrite like so:

$ tcprewrite --fragroute=frag.cfg --infile=input.pcap --outfile=output.pcap

 

1.2.4  Tcpreplay工具的使用

1.2.4.1  简介

Tcpreplay 到目前为止经历了3个版本的变化,1.X 实现了读包和回放功能,2.X 实现了各种重写功能,3.X 将读包(解析包)功能封装为tcpprep,将重写部分功能封装为 tcprewrite,而在tcpreplay里封装了强大的发包功能

1.2.4.2  基本用法

u  最简单的方式

# tcpreplay --intf1=eth0 sample.pcap

 

u  控制发送速度

# tcpreplay --topspeed --intf1=eth0 sample.pcap

# tcpreplay --mbps=10.0 --intf1=eth0 sample.pcap

# tcpreplay --multiplier=7.3 --intf1=eth0 sample.pcap

# tcpreplay --multiplier=0.5 --intf1=eth0 sample.pcap

# tcpreplay --pps=25 --intf1=eth0 sample.pcap

# tcpreplay --oneatatime --verbose --intf1=eth0 sample.pcap

 

u  控制发送次数

# tcpreplay --loop=10 --intf1=eth0 sample.pcap

# tcpreplay --loop=0 --intf1=eth0 sample.pcap

 

1.2.4.3  高级

u  同时从两个端口发送数据

# tcpreplay --cachefile=sample.prep --intf1=eth0 --intf2=eth1 sample.pcap

# tcpreplay --dualfile --intf1=eth0 --intf2=eth1 side-a.pcap side-b.pcap

 

u  根据不同系统选择时间延迟函数

发包速度的控制,tcpreplay在实现的时候使用了延迟函数的概念,这涉及到底层OS很多特性,在不同系统上使用tcpreplay,根据系统不同选择不同的延迟函数

--timer=abstime

--timer=gtod

--timer=nano

--timer=rdtsc

--timer=ioport

--timer=select

u  一些建议

1)推荐的速度控制函数:--topspeed、--pps、--pps-multi(--pps-multi 比 –pps 每秒多发一个包,所以速度更快); --mbps、--multiplier 在对性能要求比较高的情况下不推荐使用,因为需要大量的运算。

 

2)虚拟技术,如 vmware 会对发包的速度控制造成很大影响

1.2.5  Tcpreplay套件使用示例

转载地址:https://www.cnblogs.com/jiayy/p/3447027.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3